import axios from 'axios'

// 多实例创建axios请求
const ins = axios.create()

// 响应拦截器
ins.interceptors.response.use(
  res => res.data,
  err => {
    // 请求错误提示
    return Promise.reject(err)
  }
)


// 处理响应有异常（角色列表中）
ins.interceptors.response.use(
  res => res,
  err => {
    // 钩子，发送此请求给错误日志服务器
    // 日志服务器，一般后端都会接入公司的聊天工具，一但有问题，提醒开发者
    if (err.request.status == 404) {
      Message({
        message: '请求数据的接口网络不存在，请联系开发者',
        showClose: true,
        duration: 10000,
        type: 'error'
      })
    }
    // 请求错误提示
    return Promise.reject(err)
  }
)

// 请求拦截器
ins.interceptors.request.use(config => {
  // 请求的超时时长
  config.timeout = 10000
  // 要想让它走代理，则一定开发时不要配置
  config.baseURL = process.env.VUE_APP_APIHOST
  return config
})

/**
 * get请求
 * @param {string} url 请求的url地址
 * @param {object} config 请求的额外头信息
 * @returns Promise<any>
 */
export const get = (url, config = {}) => ins.get(url, config)

/**
 * post请求
 * @param {string} url 请求的url地址
 * @param {json|urlEncoded|formData} data 请求体数据   formData[Content-Type=multipart/form-data]
 * @param {object} config 请求的额外头信息
 * @returns Promise<any>
 */
export const post = (url, data = {}, config = {}) => ins.post(url, data, config)


/**
 * delete请求
 * @param {string} url 请求的url地址
 * @param {object} config 请求的额外头信息
 * @returns Promise<any>
 */
export const del = (url, config = {}) => ins.delete(url, config)



/**
 * put请求
 * @param {string} url 请求的url地址
 * @param {json|urlEncoded|formData} data 请求体数据   formData[Content-Type=multipart/form-data]
 * @param {object} config 请求的额外头信息
 * @returns Promise<any>
 */
export const put = (url, data = {}, config = {}) => ins.put(url, data, config)
